// repository包实现了对数据库的访问
// 遵循整洁架构的原则, 仓储层负责数据的存取, 而不包含业务逻辑
package repository

import (
	"context"

	"gitee.com/jiebaiyou/formflow/model"
	"gitee.com/jiebaiyou/formflow/pkg/storage/redis"
	"gitee.com/jiebaiyou/formflow/pkg/storage/sqlite"
)

// taskRepository 任务仓储实现
// 实现了model.TaskRepository接口, 负责任务数据的持久化
type taskRepository struct {
	db    sqlite.DB      // SQLite数据库实例
	cache redis.Database // Redis数据库实例
}

// NewTaskRepository 创建任务仓储实例
func NewTaskRepository(db sqlite.DB, cache redis.Database) model.TaskRepository {
	return &taskRepository{
		db:    db,
		cache: cache,
	}
}

// Create 创建新任务
func (tr *taskRepository) Create(c context.Context, task *model.Task) error {
	return tr.db.Create(task)
}

// FetchByUserID 获取指定用户的所有任务
func (tr *taskRepository) FetchByUserID(c context.Context, userID uint) ([]model.Task, error) {
	var tasks []model.Task
	err := tr.db.Where("user_id = ?", userID).Find(&tasks)
	return tasks, err
}
